const express = require('express')
    // 处理路径
const path = require('path');
const app = express()

const home = require('./route/home.js')
const admin = require('./route/admin.js')
const login = require('./route/login.js')
const template = require('art-template')

// 引入body-parser模块 用来处理post请求参数
const bodyPaser = require('body-parser');

// 导入express-session模块
const session = require('express-session');

const morgan = require('morgan');

//格式化事件
const dateFormat = require('dateformat')

// 数据库连接
require('./model/connect');


//向模板内导入dateformate
//dateFormat 依赖art-template ,故要先导入
template.defaults.imports.dateFormat = dateFormat
    // 临时创建一个用户
    // require('./model/user');

// 配置session,实现登陆
// 设置未登陆时，不保存cookie      saveUninitialized: false, 
//   maxAge: 24 * 60 * 60 * 1000  过期时间
app.use(session({
    secret: 'secret key',
    saveUninitialized: false, 
    cookie: {
        maxAge: 24 * 60 * 60 * 1000
    }
}));

// 处理post请求参数
app.use(bodyPaser.urlencoded({ extended: false }));

// 告诉express框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
// 告诉express框架模板的默认后缀是什么
app.set('view engine', 'art');
// 当渲染后缀为art的模板时 所使用的模板引擎是什么
app.engine('art', require('express-art-template'));

// 开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')))

// 拦截请求 判断用户登录状态
app.use('/admin', require('./middleware/loginGuard'));


app.use(morgan('dev'))

app.use('/home', home)
app.use('/admin', admin)
app.use('/login', login)

app.get('/', (req, res) => {
    res.redirect('/home/')
});


//错误处理的中间件
app.use((err, req, res, next) => {
    // 将字符串对象转换为对象类型
    // JSON.parse() 
    const result = JSON.parse(err);
    let params = []
    for (item in result) {
        if (item != "path") {
            params.push(item + "=" + result.item)
        }
    }
    res.redirect(`${result.path}?params.join("&")`);
})

app.listen(3000)
console.log("服务器启动成功")